1. Technical Field
The present invention relates in general to a system and method for splicing connections through a network switch or router. More particularly, the present invention relates to a system and method having nodes determine handling of client requests and initiate TCP splicing.
2. Description of the Related Art
The enormous growth of the Internet has created substantial workloads for Internet data centers. Content providers often address this workload by employing large numbers of servers which are often in rack-mounted configurations. With the global Internet population predicted to double over the next few years, the ability to rapidly scale services is an important factor for content providers.
When serving some types of content, such as static content, scalability can be addressed by using distributed requests based on the content being requested. For example, a content provider may have certain content stored on one server, or group of servers, and other types of content stored on another server, or another group of servers. Some mechanisms attempt to service requests using servers where the requested data is readily available, often within the server's memory or within the server's processor data cache. These attempts have lead to the development of “layer-7” switching (also known as “application layer switching”). In layer-7 switching, the edge-switch parses the incoming request and determines to which back-end server the request should be dispatched.
Handling layer-7 switching at the switch presents various challenges. The incoming connection is accepted by the switch and the request is received, parsed, and the route resolved to the server (also known as the “back-end node” or simply “node”). The switch then performs network translations, or TCP splicing, to connect the requester with the designated back-end node. One challenge is that these additional operations are inefficiently processed by the highly parallel, pipeline architecture of typical switching hardware. An additional challenge is that the switching hardware is burdened by continually monitoring connections to determine whether subsequent requests should be dispatched to different back-end servers.
What is needed, therefore, is a system and method in which the front-end switch handles header manipulation and packet forwarding while the back-end nodes perform the application layer routing decisions.